/*----------------------------------------------------------------------------------------
*
*  Copyright 2019, Gao Hai Hui, <fromzeropoint@126.com>.  All rights reserved.
*  https://gitee.com/helloworldghh/xoskit.git
*  Use of this source code is governed by a MIT license
*  that can be found in the License file.
*
----------------------------------------------------------------------------------------*/
#include "../import/head.h"
#include "../impl/head.h"
#include "all_done_test.h"

namespace xos_box
{
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 

    static all_done_test::ITEM_DATA xos_item_data;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    all_done_test::all_done_test()
    {
        init_data();
    }

    all_done_test::~all_done_test()
    {
        term();
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 

    int all_done_test::get_xos_item_data( ITEM_DATA *& item_ptr )
    {
        int ret = 0;
        xos_item_data.set_container( mgr::container() );
        item_ptr = &xos_item_data;
        return ret;
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 

    int all_done_test::init_data()
    {
        int ret = 0;
        m_bTest = false;
        m_pNotify = 0;
        m_nSetNum = 0;
        m_nNum = 0;
        m_nMsg = -1;
        return ret;
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 

    int all_done_test::init()
    {
        int ret = 0;
        return ret;
    }

    int all_done_test::term()
    {
        int ret = 0;
        init_data();
        return ret;
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 

    int all_done_test::set_notify( i_notify * pNotify, int nMsg )
    {
        int ret = 0;
        m_pNotify = pNotify;
        m_nMsg = nMsg;
        return ret;
    }

    int all_done_test::add_num( int nNum )
    {
        int ret = 0;
        m_nSetNum += nNum;
        return ret;
    }

    int all_done_test::test( int nNum )
    {
        int ret = 0;

        if( !m_bTest && ( 0 == ret ) )
        {
            ret = 1;
        }

        if( 0 == ret )
        {
            m_nNum += nNum;
        }

        if( ( 0 == ret ) && ( m_nNum != m_nSetNum ) )
        {
            ret = 2;
        }

        if( 0 == ret )
        {
            m_pNotify->notify( m_nMsg );
            m_bTest = false;
            m_nNum = 0;
        }

        return ret;
    }

    int all_done_test::reset()
    {
        int ret = 0;
        m_bTest = true;
        m_nSetNum = 0;
        m_nNum = 0;
        return ret;
    }

} // xos
